#ifndef __WORLDLOADER_HH__
#define __WORLDLOADER_HH__

#include <mc/chunk.h>
#include <mc/chunkid.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <string>
#include <fstream>

namespace mc
{

class Loader
{
public:
    static Loader* instance(const std::string& filename = "");
    static void free();

private:
    //! @brief 构造函数
    Loader(const std::string& filename);
    ~Loader() noexcept;

    static Loader* _instance;

public:
    //! @brief 从文件加载世界，并且返回玩家位置
    glm::vec3 load();

    //! @brief 保存世界到文件
    void save(const glm::vec3& pos);

    //! @brief 创建空世界
    glm::vec3 create();

    //! @brief 保存特定区块
    void saveChunk(const ChunkID& id);

    //! @brief 读取特定区块
    Chunk* loadChunk(const ChunkID& id);

    //! @brief 初始化区块
    Chunk* initChunk(const ChunkID& id);

private:
    std::fstream _file;
    std::string _filename;
    bool _exit;
};

}

#endif  // __MAPLOADER_HH__